package com.example.wangzh.mytest.part.reingold_tifold;

import java.util.Random;

public class BinaryTreeUtils {

    private static final Random random = new Random();

    /**
     * 生成一个 5 层的随机二叉树
     *
     * @return 二叉树的根节点
     */
    public static TreeNode generateRandomTree() {
        return generateRandomTree("", 0, 0, 5);
    }

    /**
     * 递归生成随机二叉树
     *
     * @param value 当前节点的值
     * @param x     当前节点的 x 坐标
     * @param y     当前节点的 y 坐标
     * @param depth 当前节点的深度
     * @return 当前节点
     */
    private static TreeNode generateRandomTree(String value, int x, int y, int depth) {
        if (depth == 0) {
            return null; // 达到最大深度，停止生成
        }

        // 创建当前节点
        TreeNode node = new TreeNode(value, x, y);

        // 随机生成左子树
        if (random.nextBoolean()) {
            node.left = generateRandomTree("", 0, 0, depth - 1);
        }

        // 随机生成右子树
        if (random.nextBoolean()) {
            node.right = generateRandomTree( "", 0, 0, depth - 1);
        }

        return node;
    }

    /**
     * 递归打印二叉树结构
     *
     * @param node  当前节点
     * @param level 当前节点的层级
     */
    public static void printTree(TreeNode node, int level) {
        if (node == null) {
            return;
        }

        // 打印当前节点的值和坐标
        System.out.println("Level " + level + ": value=" + node.value + ", x=" + node.x + ", y=" + node.y);

        // 递归打印左子树和右子树
        printTree(node.left, level + 1);
        printTree(node.right, level + 1);
    }
}
